<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
顶层对象，在浏览器环境指的是window对象，在Node指的是global对象。ES5之中，顶层对象的属性与全局变量是等价的。
<p></p>let命令、class命令声明的全局变量不属于顶层对象的属性
</body>
<script>

    function Fun(){
        return this;
    }
    Fun.getVal = function(){
        console.log(0)
    }
    var getVal = function(){
        console.log(1)
    }
    Fun().getVal() // 1 注意在node环境不是1
    /**
     * 函数里面的this，如果函数不是作为对象的方法运行，而是单纯作为函数运行，this会指向顶层对象
     * Fun()返回的this,在浏览器环境，函数中这里的this指向window，
     * 也就是说第一步Fun( )返回的是window，转换一下就是window.getName()
     */



    var a = "a";
    let b = "b";

    console.log(window.a) // a
    console.log(window.b) // undefined
    /**
     * 全局变量a由var命令声明，所以它是顶层对象的属性；
     * let命令、class命令声明的全局变量不属于顶层对象的属性
     * 全局变量b由let命令声明，所以它不是顶层对象的属性，返回undefined
     */

</script>
</html>